package com.qst.order.listener;

import com.qst.order.service.OrderService;
import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;

@Component
@Slf4j
public class OrderExpireListener implements MessageListener {

    @Autowired
    private OrderService orderService;

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Override
    public void onMessage(Message message, byte[] pattern) {
        // 1. 解析过期的键（Redis键的字节数组需要转字符串）
        String expiredKey = new String(message.getBody(), StandardCharsets.UTF_8);

        // 2. 过滤仅处理订单相关的键（假设订单键格式为 "order:{orderId}"）
        if (expiredKey.startsWith("order:")) {
            Integer orderId =Integer.valueOf(expiredKey.replace("order:", "")) ;
            try {
                // 3. 调用取消订单逻辑（带分布式锁防止重复处理）
                orderService.canceledOrder(orderId);
            } catch (Exception e) {
                // 记录日志，后续可通过补偿机制处理
                log.error("处理过期订单失败，orderNo:{}", orderId, e);
            }
        }
    }
}